#include "gtk/gtkcellrendererpixbuf.h"
#include "gtk/gtkcellrenderertext.h"
#include "gtk/gtkpango.h"
+#include "gtk/gtkwidgetprivate.h"
#define GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE (_gtk_icon_view_item_accessible_get_type ())
#define GTK_ICON_VIEW_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE, GtkIconViewItemAccessible))
items = items->next;
}
view->items = g_list_insert_before (view->items, items, info);
- view->old_hadj = NULL;
- view->old_vadj = NULL;
}
static gint
}
}
-static void
-gtk_icon_view_accessible_adjustment_changed (GtkAdjustment *adjustment,
- GtkIconViewAccessible *view)
-{
- gtk_icon_view_accessible_traverse_items (view, NULL);
-}
-
void
-_gtk_icon_view_accessible_set_adjustment (AtkObject *accessible,
- GtkOrientation orientation,
- GtkAdjustment *adjustment)
+_gtk_icon_view_accessible_adjustment_changed (GtkIconView *icon_view)
{
- GtkIconViewAccessible *view = (GtkIconViewAccessible*)accessible;
- GtkAdjustment **old_adj_ptr;
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- if (view->old_hadj == adjustment)
- return;
-
- old_adj_ptr = &view->old_hadj;
- }
- else
- {
- if (view->old_vadj == adjustment)
- return;
-
- old_adj_ptr = &view->old_vadj;
- }
+ GtkIconViewAccessible *view;
- /* Disconnect signal handlers */
- if (*old_adj_ptr)
- {
- g_object_remove_weak_pointer (G_OBJECT (*old_adj_ptr),
- (gpointer *)old_adj_ptr);
- g_signal_handlers_disconnect_by_func (*old_adj_ptr,
- gtk_icon_view_accessible_adjustment_changed,
- accessible);
- }
+ view = GTK_ICON_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (icon_view)));
+ if (view == NULL)
+ return;
- /* Connect signal */
- *old_adj_ptr = adjustment;
- g_object_add_weak_pointer (G_OBJECT (adjustment), (gpointer *)old_adj_ptr);
- g_signal_connect (adjustment, "value-changed",
- G_CALLBACK (gtk_icon_view_accessible_adjustment_changed),
- accessible);
+ gtk_icon_view_accessible_traverse_items (view, NULL);
}
static void
icon_view = (GtkIconView*)data;
view = (GtkIconViewAccessible*)accessible;
- if (icon_view->priv->hadjustment)
- _gtk_icon_view_accessible_set_adjustment (accessible,
- GTK_ORIENTATION_HORIZONTAL,
- icon_view->priv->hadjustment);
- if (icon_view->priv->vadjustment)
- _gtk_icon_view_accessible_set_adjustment (accessible,
- GTK_ORIENTATION_VERTICAL,
- icon_view->priv->vadjustment);
g_signal_connect (data, "notify",
G_CALLBACK (gtk_icon_view_accessible_notify_gtk), NULL);
G_OBJECT_CLASS (_gtk_icon_view_accessible_parent_class)->finalize (object);
}
-static void
-gtk_icon_view_accessible_destroyed (GtkWidget *widget,
- GtkAccessible *accessible)
-{
- AtkObject *atk_obj;
- GtkIconViewAccessible *view;
-
- atk_obj = ATK_OBJECT (accessible);
- view = (GtkIconViewAccessible*)atk_obj;
- if (view->old_hadj)
- {
- g_object_remove_weak_pointer (G_OBJECT (view->old_hadj),
- (gpointer *)&view->old_hadj);
-
- g_signal_handlers_disconnect_by_func (view->old_hadj,
- (gpointer) gtk_icon_view_accessible_adjustment_changed,
- accessible);
- view->old_hadj = NULL;
- }
- if (view->old_vadj)
- {
- g_object_remove_weak_pointer (G_OBJECT (view->old_vadj),
- (gpointer *)&view->old_vadj);
-
- g_signal_handlers_disconnect_by_func (view->old_vadj,
- (gpointer) gtk_icon_view_accessible_adjustment_changed,
- accessible);
- view->old_vadj = NULL;
- }
-}
-
-static void
-gtk_icon_view_accessible_connect_widget_destroyed (GtkAccessible *accessible)
-{
- GtkWidget *widget;
-
- widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
- if (widget)
- {
- g_signal_connect_after (widget, "destroy",
- G_CALLBACK (gtk_icon_view_accessible_destroyed), accessible);
- }
- GTK_ACCESSIBLE_CLASS (_gtk_icon_view_accessible_parent_class)->connect_widget_destroyed (accessible);
-}
-
static void
_gtk_icon_view_accessible_class_init (GtkIconViewAccessibleClass *klass)
{
GObjectClass *gobject_class;
- GtkAccessibleClass *accessible_class;
AtkObjectClass *atk_class;
gobject_class = (GObjectClass *)klass;
- accessible_class = (GtkAccessibleClass *)klass;
atk_class = (AtkObjectClass *)klass;
gobject_class->finalize = gtk_icon_view_accessible_finalize;
atk_class->get_n_children = gtk_icon_view_accessible_get_n_children;
atk_class->ref_child = gtk_icon_view_accessible_ref_child;
atk_class->initialize = gtk_icon_view_accessible_initialize;
-
- accessible_class->connect_widget_destroyed = gtk_icon_view_accessible_connect_widget_destroyed;
}
static void
GtkAdjustment *adjustment)
{
GtkIconViewPrivate *priv = icon_view->priv;
- AtkObject *atk_obj;
if (adjustment && priv->hadjustment == adjustment)
return;
priv->hadjustment = g_object_ref_sink (adjustment);
gtk_icon_view_set_hadjustment_values (icon_view);
- atk_obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
- _gtk_icon_view_accessible_set_adjustment (atk_obj,
- GTK_ORIENTATION_HORIZONTAL,
- adjustment);
-
g_object_notify (G_OBJECT (icon_view), "hadjustment");
}
GtkAdjustment *adjustment)
{
GtkIconViewPrivate *priv = icon_view->priv;
- AtkObject *atk_obj;
if (adjustment && priv->vadjustment == adjustment)
return;
priv->vadjustment = g_object_ref_sink (adjustment);
gtk_icon_view_set_vadjustment_values (icon_view);
- atk_obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
- _gtk_icon_view_accessible_set_adjustment (atk_obj,
- GTK_ORIENTATION_VERTICAL,
- adjustment);
-
g_object_notify (G_OBJECT (icon_view), "vadjustment");
}
if (icon_view->priv->doing_rubberband)
gtk_icon_view_update_rubberband (GTK_WIDGET (icon_view));
+
+ _gtk_icon_view_accessible_adjustment_changed (icon_view);
gtk_icon_view_process_updates (icon_view);
}